package optional;



import reflection.Person;

import java.util.Optional;

/**
 * @author LiuYan
 * @date 2021/11/22 8:41
 * Optional 容器类常用的方法
 * Optional.of(T t):创建一个空的Optional实例
 * Optional.ofNullable(T t):若t不为null，创建Optional实例，否则创建空实例
 * isPresent():判断是否包含值
 * orElse(T t):若果调用对象包含值，返回该值，否则返回t
 * orElseGet(Supplier s):如果调用对象包含值，返回该值，否则返回s获取的值
 * map(Function f):如果有值对其处理，并返回处理后的Optional，否则返回Optional.empty()
 * flatMap(Function mapper):与map类似，要求返回值必须是Optional
 */
public class Part12 {
    public static void main(String[] args) {

//        Optional<Object> optional = Optional.of(null);
//        Object o1 = optional.orElseGet(Student::new);
//        System.out.println(o1);

        Optional<Person> empty = Optional.empty();
        Person ly = empty.orElse(new Person("ly", 18));
        System.out.println(ly);

        Optional<Object> o = Optional.ofNullable(null);
        if (o.isPresent()) {
            System.out.println(o.get());
        } else {
            System.out.println("没有值");
        }

        Optional<Person> ly1 = Optional.ofNullable(new Person("ly", 18));
        Optional<String> s = ly1.map(Person::getName);
        System.out.println(s.get());

        Optional<String> s1 = ly1.flatMap(person -> Optional.of(person.getName()));
        System.out.println(s1.get());


    }
}
